/**
 * Array Flatten
 * 写一个JS函数，显示数组扁平化，只减少一级嵌套
*/ 
/**
 * 思路1：使用push
 * 定义空数组 arr = []。遍历当前数组
 * 如果item非数组，则累加到arr
 * 如果item是数组，则遍历之后累加到arr
 */ 
function flatten1 (arr: any[]): any[] {
  const res: any[] = []
  arr.forEach(item => {
    if (Array.isArray(item)) {
      item.forEach(n => res.push(n))
    } else {
      res.push(item)
    }
  })
  return res
}
/**
 * 思路2：concat
 */ 
function flatten2 (arr: any[]): any[] {
  let res: any[] = []
  arr.forEach(item => {
    res = res.concat(item)
  })
  return res
}
/**
 * Array Flatten Deep
 * 写一个JS函数，显示数组深度扁平化
*/ 
/**
 * 思路1：push
 */ 
function flattenDeep1 (arr: any[]): any[] {
  const res: any[] = []
  arr.forEach(item => {
    if (Array.isArray(item)) {
      const flatItem = flattenDeep1(item) // 递归
      flatItem.forEach(n => res.push(n))
    } else {
      res.push(item)
    }
  })
  return res
}
/**
 * 思路2：concat
 */ 
function flattenDeep2 (arr: any[]): any[] {
  let res: any[] = []
  arr.forEach(item => {
    if (Array.isArray(item)) {
      const flatItem = flattenDeep2(item) // 递归
      res = res.concat(flatItem)
    } else {
      res = res.concat(item)
    }
  })
  return res
}